/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package AA;

/**
 *
 * @author asc
 */
public class P402
{
    public static int pesa[];
    public static int soporta[];
    public static int elem;
    public static int Sol;
    public static int llamadas;
    
    public static int bestSolution(String[] data){
        String[] Pesos = data[0].split("\\p{Space}+");
        String[] Soporte = data[1].split("\\p{Space}+");
        
        Sol=0;
        llamadas=0;
        elem = Pesos.length;
        pesa = new int[elem];
        soporta = new int[elem];
        for (int i = 0; i < elem; i++)
        {
            pesa[i]=Integer.parseInt(Pesos[i]);
            soporta[i]=Integer.parseInt(Soporte[i]);
        }
        
        alturaMax(0,0,Integer.MAX_VALUE);
        return Sol;
    }
    
    public static void alturaMax (int nivel, int caja, int pesoRestante){
        llamadas++;
        if(caja == elem){
            if(Sol < nivel){
                Sol = nivel;
            }
        }
        else if(pesoRestante < pesa[caja]){
            alturaMax(nivel, caja+1, pesoRestante);
        }
        else if(Sol < (nivel + (elem-caja))){
            alturaMax(nivel+1, caja+1, Math.min(pesoRestante-pesa[caja],soporta[caja]));
            if(Sol < (nivel + (elem-caja)))alturaMax(nivel, caja+1, pesoRestante);
        }
    }
    
    public static void main(String[] args)
    {
        String[] data = {"19 7 5 6 1" , "15 13 7 8 2"};
        P402 p = new P402();
        System.out.print(p.bestSolution(data) + "\n" + String.valueOf(llamadas));
    }
}
